#include "stdio.h"
#include "graphics.h"
#define ROUND(a) ((int)(a+0.5))
void lineDDA();
main()
{
	int ax,bx,ay,by,driver,mode;		/* initial value */
	clrscr();

	printf("Enter Number of xa: ");  	/* input start&end line */
	scanf("%d",&ax);
	printf("Enter Number of ya: ");
	scanf("%d",&ay);
	printf("Enter Number of xb: ");
	scanf("%d",&bx);
	printf("Enter Number of yb: ");
	scanf("%d",&by);
	clrscr();

	driver=VGA;				/* set mode display */
	mode=VGAHI;
        initgraph(&driver,&mode,"");
	gotoxy(300,0);				/* show pont of start&end line */
	printf("(x,y) Start:(%d,%d)",ax,ay);
	gotoxy(300,0);
	printf("(x,y) End:(%d,%d)",bx,by);
	lineDDA(ax,ay,bx,by);			/* call function lineDDA */
	getch();

}

void lineDDA(int xa, int ya, int xb, int yb)
{
  int dx = xb - xa, dy = yb - ya, steps, k;	/* initial value */
  float xIncrement, yIncrement, x = xa, y = ya;
  if (abs (dx) > abs (dy)) steps = abs (dx);    /* เช็คค่าผลต่างของ X และ Y ถ้าใช่ steps = ค่า abs(dx) */
  else steps = abs (dy);			/* ถ้าไม่ ค่า steps = abs(dy) */
  xIncrement = dx / (float) steps;		/* ค่า xIncrement = dx หารด้วย steps */
  yIncrement = dy / (float) steps;		/* ค่า yIncrement = dy หารด้วย steps */

  putpixel(x,y,15);				/* แสดงผล ณ ตำแหน่ง x,y กำหนด */
  for (k=0; k<steps;k++) {			/* วนลูปเพื่อทำการแสดงผลจนถึงจุดสิ้นสุด */
    x += xIncrement;				/* เพิ่มค่า x += xIncrement */
    y += yIncrement;				/* เพิ่มค่า y += yIncrement */
    putpixel(x,y,15);
  }
}